import url_manager
import html_downloader
import html_parser
import html_outputer
#爬虫总调度程序
class SpiderMain(object):
    def __init__(self):
        self.urls = url_manager.UrlManager()  # url管理器
        self.downloader = html_downloader.HtmlDownloader()  # html下载器
        self.parser = html_parser.HtmlDParser()  # html解析器
        self.outputer = html_outputer.HtmlOutputer()  # 数据存储
    def craw(self,root_url):
        count = 1
        #将url添加至url管理器
        self.urls.add_news_url(root_url)
        #通过whilr循环获取url并处理
        while  self.urls.has_news_url():
           try:
               news_url = self.urls.get_news_url()  # 获取新的url
               print('craw',count,':',news_url)
               html_cont = self.downloader.downloader(news_url)  # 启动下载器下载页面
               news_url,news_data = self.parser.parse_(news_url, html_cont)  # 启动页面解析器解析出需要的内容以及新的url
               # 将解析的uil添加至uil管理器，将内容添加至内容管理器
               self.urls.add_news_urls(news_url)
               self.outputer.collect_data(news_data)
               if count == 1000:
                   break
               count=count+1
           except:
               print('craw failed')
        #输出收集好的数据
        self.outputer.output_html()
if __name__=='__main__':
    root_url='http://baike.baidu.com/item/Python'
    obj_spider=SpiderMain()
    obj_spider.craw(root_url)